//
//  main.m
//  NSDictionary
//
//  Created by admin on 2019/8/8.
//  Copyright © 2019 猫爷爷的酱醋茶. All rights reserved.
//
/*
 
 数组的缺点：
    数组元素的下标不固定，对数组的新增和删除都有可能发生改变元素下标，所以无法通过下标来唯一确定数组中的元素。
 
 字典数组：
    以键值对方式存储数据的数组：NSDictionary 和 NSMutableDictionary
    键Key：只能是遵守了NSCoNSCoping协议的对象，而NSString就是遵守了这个协议；
    值Value：只能是OC对象。
 
 一般的创建方式：
    将字典数组的值键 挨个的写在后面进行初始化
    + (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...
 
    [NSDictionary dictionaryWithObjectsAndKeys:@"jack",@"name",@"上海闵行区",@"address", nil]
 
 简要创建方式：
     NSDictionary *dict = @{@"name":@"猫爷爷的酱醋茶",
        @"Career":@"IOS开发者",
        @"grade":@"IOS初级工程师"
     };
 
 字典数组存取数据的原理：
    1）当往字典数组中存储一个键值对的时候，并不是按照顺序挨个挨个的存储
        而是会根据键和数组的长度做一个哈希算法，算出一个下标，将这个键值对存储在该下标处。
    2）取值的时候，也是根据一个哈希算法，就可以算出这个键值对存储的下标，然后通过这个下标查找到相应的数据。
 
    NSArray数组存数据是挨个挨个存储的
    故，存储的效率，NSArray的效率更高。
    但，取数据的时候，如果不是全部一次性取出来，而是取指定的元素，
    只能挨个遍历，效率较差。
 
 何时使用NSArray和NSDictionary
 - 存储进去之后，需要一次性全部取出数据的，使用NSArray
 - 存储进去之后，需要指定元素取值的，使用NSDictionary
 
 字典中什么类型的字典使用最多？ - [NSString:NSObject]
 因为网络上获取的JSON有一个要求，Key必须是NSString - JSON中的字符串有引号，Number没有引号，空值为null
 
 
 */

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    
    NSDictionary *dict = @{@"name":@"猫爷爷的酱醋茶",
                           @"Career":@"IOS开发者",
                           @"grade":@"IOS初级工程师"
                           };
    
    NSLog(@"%@",dict);//打印的顺序 按照Key的ASCII码
    
    //字典的遍历 - 遍历的是字典的key 再用key取字典的值
    for(id key in dict)
    {
        
        NSLog(@"%@ = %@",key,dict[key]);//正常打印
        
    }
    
    return 0;
}
